7dd00b5e080eea36f0320ceae2ca1287c5d8ccde,core/generator/source/jetbrains/mps/generator/TransientModelsComponent.java,TransientModelsComponent,clearAll,#,110

Before Change


  }

  private void clearAll() {
    ModelAccess.instance().tryWrite(new Runnable() {
      public void run() {
        List<TransientModelsModule> toRemove = new ArrayList<TransientModelsModule>(myModuleMap.values());
        myModuleMap.clear();
        for(TransientModelsModule m : toRemove) {
          m.disposeModule();
        }
      }
    });

    TransientSwapSpace space = getTransientSwapSpace();
    if (space != null) {

After Change



  private void clearAll() {
    int i;
    for (i = 0; i < 3 && !ModelAccess.instance().tryWrite(new Runnable() {
      public void run() {
        List<TransientModelsModule> toRemove = new ArrayList<TransientModelsModule>(myModuleMap.values());
        myModuleMap.clear();
        for(TransientModelsModule m : toRemove) {
          m.disposeModule();
        }
      }
    }); ++i) {
      try {
        Thread.sleep((1<<i)*100);
      } catch (InterruptedException ignore) {}
    }
    if (i >= 3) {
      throw new RuntimeException("Failed to acquire write lock");
    }

    TransientSwapSpace space = getTransientSwapSpace();